<template>
	<view>
		<u-popup :show="versionUpdate.show" mode="center" @close="close" :closeOnClickOverlay="false" round="20rpx">
			<view class="poStyle">
				<view class="header">新版本</view>
				<scroll-view scroll-y="true" class="scroll-Y">
					<rich-text :nodes="versionUpdate.versionContent"></rich-text>
				</scroll-view>
				<view style="width: 100%;height: 30rpx;"></view>
				<view style="color: red;">
					发现新版本：
					<span style="font-size: 25rpx;color: #CCCCCC;">
						V {{versionUpdate.newVersion}}
					</span>
				</view>
				<view style="width: 100%;height: 40rpx;"></view>
				<view v-if="versionUpdate.time !=0" style="width: 90%;">
					<u-line-progress :percentage="versionUpdate.time" />
				</view>
				<u-button v-if="versionUpdate.time ==0" :custom-style="customStyleBtn1" :loading="loading" @click="versionUpdatePopupOpen">
					更新版本
				</u-button>
			</view>
		</u-popup>
	</view>

</template>

<script>
	import {
		getPatchManage
	} from '@/api/login.js'
	import config from '@/config'
	export default {
		data() {
			return {
				loading: false,
				img_src: config.uploadUrl,
				customStyleBtn1: {
					width: '90%',
					height: '80rpx',
					borderRadius: '80rpx',
					background: "#3772FE",
					fontSize: '30rpx',
					fontWeight: 400,
					color: '#ffffff',
					border: 'none',
					lineHight: '50rpx !important',
					letterSpacing: '1px',
					isEye: false
				},
				// app版本更新Data
				versionUpdate: {
					version: '1.0.0', //当前版本
					newVersion: '1.0.0', //更新版本
					versionContent: "", //更新内容
					downloadTask: null, //更新任务
					updateType: null, //0 热更新  1整包更新
					show: false, //更新弹框
					patchUrl: "", //更新wgt包
					patchiosUrl:"",
					schedule: { // 更新进度对象
						// 进度
						progress: "",
						// 已经下载长度
						totalBytesWritten: "",
						// 预期下载长度
						totalBytesExpectedToWrite: ""
					},
					time: 0 //更新进度更新间隔时间ms
				},
				percentage: 30
			}
		},
		methods: {
			close() {
				this.versionUpdate.show = false
			},
			// 检测新版本
			detectNewVersion() {
				// #ifdef APP-PLUS  
				plus.runtime.getProperty(plus.runtime.appid, async (widgetInfo) => {
					// 拿到当前app版本
					let version = widgetInfo.version;
					this.versionUpdate.version = version;
					// 获取最新版本api接口 需要返回 version , content , source_download三个属性
					const res = await getPatchManage()
					console.log('版本更新:',res.data);
					let data = res.data // 拿到数据
					this.versionUpdate.updateType = data.updateType
					this.versionUpdate.newVersion = data.versionCode // 保存新版本--用来弹框展示
					this.versionUpdate.versionContent = data.content // 保存更新内容--用来弹框展示
					// 有新版本--进行更新
					if (data.versionCode != version) {
						this.versionUpdate.patchiosUrl = res.data.iosDownloadUrl
						this.versionUpdate.patchUrl = res.data.downloadUrl // 保存新版本wgt包
						this.versionUpdate.show = true // 显示更新弹框
						uni.hideTabBar();
					} else {}
				})
				// #endif
			},
			// 新版本更新
			versionUpdatePopupOpen() {
				this.loading = true
				let patchUrl = this.img_src + this.versionUpdate.patchUrl
				let patchiosUrl = this.img_src + this.versionUpdate.patchiosUrl
				const systemInfo = uni.getSystemInfoSync();
				if (systemInfo.platform === 'ios'){
					// 更新wgt包
					if (this.versionUpdate.updateType == 0) {
						// 创建下载任务
						this.versionUpdate.downloadTask = uni.downloadFile({
							url: patchiosUrl,
							success: downloadResult => {
								if (downloadResult.statusCode === 200) {
									plus.runtime.install(downloadResult.tempFilePath, {
										force: true
									}, function() {
										this.loading = false
										// 安装成功
										plus.runtime.restart(); //热更新要重新启动才能生效
									}, function(e) {
										// 安装失败
									});
								}
							},
							fail: (err) => {
								this.versionUpdate.show = false
							}
						})
					} else {
						// 整包更新
						this.loading = false
						plus.runtime.openURL(patchiosUrl);
					}
				}
				if (systemInfo.platform === 'android'){
					// 更新wgt包
					if (this.versionUpdate.updateType == 0) {
						// 创建下载任务
						this.versionUpdate.downloadTask = uni.downloadFile({
							url: patchUrl,
							success: downloadResult => {
								if (downloadResult.statusCode === 200) {
									plus.runtime.install(downloadResult.tempFilePath, {
										force: true
									}, function() {
										this.loading = false
										// 安装成功
										plus.runtime.restart(); //热更新要重新启动才能生效
									}, function(e) {
										// 安装失败
									});
								}
							},
							fail: (err) => {
								this.versionUpdate.show = false
							}
						})
					} else {
						// 整包更新
						this.loading = false
						plus.runtime.openURL(patchUrl);
					}
				}
				
				// 监听下载进度--展示下载进度
				this.versionUpdate.downloadTask.onProgressUpdate(res => {
					this.versionUpdate.time = res.progress
				});
			},
			// 取消更新
			versionUpdatePopupClose() {
				this.versionUpdate.show = false // 取消弹框
				// 如果正在更新--取消
				if (this.versionUpdate.downloadTask) {
					this.versionUpdate.downloadTask.abort()
					this.versionUpdate.downloadTask = null
					this.versionUpdate.schedule = {}
				}
			}
		}
	}
</script>

<style scoped>
	.header {
		font-weight: bold;
		font-size: 40rpx;
	}
	.scroll-Y {
		margin-top: 20rpx;
		width: 100%;
		max-height: calc(100vh - 400rpx);
		text-align: center;
		overflow: hidden;
	}
	.poStyle {
		width: 650rpx;
		max-height: calc(100vh - 400rpx);
		border-radius: 20rpx;
		padding: 30rpx 30rpx 50rpx 30rpx;
		box-sizing: border-box;
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: space-between;
		z-index: 99999;
	}
</style>